package de.jmda.gen.java;

import java.util.List;

import javax.lang.model.element.Element;
import javax.validation.constraints.NotNull;

import de.jmda.gen.CompoundGenerator;

/**
 * {@link #getStaticPartGenerators()} provides a list of {@link
 * StaticPartGenerator}s. Each of those generators is expected to produce a
 * static part. Together they are expected to produce the complete set of static
 * parts for an {@link Element}.
 *
 * @author roger.jmda@gmail.com
 */
public interface StaticPartsGenerator
		extends CompoundGenerator
{
	/**
	 * @return static part generators that produce complete set of static parts
	 *         for an {@link Element} (see {@link StaticPartsGenerator})
	 */
	@NotNull List<StaticPartGenerator> getStaticPartGenerators();
	
	/**
	 * @NotNull
	 * @return
	 */
	StaticPartGenerator demandPrimaryStaticPartGenerator();
}